/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ecom.dao;

import ecom.exception.DataAccessLayerException;
import ecom.entity.Category;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Expression;

/**
 *
 * @author
 */
public class CategoryDAO extends AbstractDAO{

        private final static String ID_CATEGORY = "idCategory";

    public CategoryDAO() {
    }

        /**
     * Crée une nouvelle Categorie dans la base de données
     * @param cat Categorie à créer
     */
    public void create(Category cat) throws DataAccessLayerException {
        super.saveOrUpdate(cat);
    }


    /**
     * Supprimer une Categorie de la base de données
     * @param cat Categorie à supprimer
     */
    public void delete(Category cat) throws DataAccessLayerException {
        super.delete(cat);
    }

    /**
     * Recherche un Categorie en fonction de sa clé primaire
     * @param id id de Categorie
     * @return Category Retourne une Categorie
     */
    public Category find(Integer id) throws DataAccessLayerException {
        return (Category) super.find(Category.class, id);
    }

    /**
     * Met à jour une Categorie dans la base de données
     * @param cat Categorie à mettre à jour
     */
    public void update(Category cat) throws DataAccessLayerException {
        super.saveOrUpdate(cat);
    }

    /**
     * Recherche toutes les Categorie de la base de données
     * @return List<Category> Retourne une liste de Categorie
     */
    public List<Category> findAll() throws DataAccessLayerException{
        return super.findAll(Category.class);
    }

    /**
     * Recherche une Categorie par son id
     * @param c id de la Categorie
     * @return Category Retourne un Categorie
     */
     public Category findByIdCategory(int c) {
        Category category = null;
         try {
            startOperation();
            Criteria crit = session.createCriteria(Category.class);
            crit.add(Expression.eq(ID_CATEGORY, c));
            category = (Category) crit.uniqueResult();
            tx.commit();
        } catch (HibernateException e) {
            handleException(e);
        }

        return category;
    }
}
